package com.hrzyit.whistle.cases.ui.adapter

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.hrzyit.base.common.BaseConstant
import com.hrzyit.base.ui.adapter.BaseRecyclerViewAdapter
import com.hrzyit.base.utils.DateUtils
import com.hrzyit.base.utils.GlideUtils
import com.hrzyit.whistle.cases.R
import com.hrzyit.whistle.cases.data.bean.UploadInfo
import kotlinx.android.synthetic.main.item_case_photo.view.*


/**
 * 上传文件适配器-案件详情、新建
 * @author YangWei
 * @date 2019/4/4
 */
class ImageUploadViewAdapter(context: Context) :
    BaseRecyclerViewAdapter<UploadInfo, ImageUploadViewAdapter.ViewHolder>(context) {

    /**
     * 上传文件最大数量
     */
    private var maxImages: Int = 9

    /**
     * 是否开启删除功能
     */
    var isDelete: Boolean = false

    /**
     * 加载文件图标视图
     */
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(mContext)
            .inflate(R.layout.item_case_photo, parent, false)
        return ViewHolder(view)
    }

    /**
     * 绑定视图
     */
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        super.onBindViewHolder(holder, position)

        // 上传的图片
        val data = dataList[position]
        //  判断上传文件类型 = 4 音频，其它是图片
        val type = data.type

        when (type) {
            4 -> {
                // 音频
                // 判断 UploadInfo 中 getPath 和 soundUrl 同时为null
                when (data.getPath.isNullOrBlank().and(data.soundUrl.isNullOrBlank())) {
                    true -> {
                        // TODO 2019/4/16 - 待完成内容：处理音频文件显示
                    }
                    else -> {
                        // 显示时间：时间戳
                        val imageAddTimeText: String = DateUtils.convertTimeToString(
                            data.addTime!!.toLong(), "yyyy-MM-dd HH:mm:ss"
                        )
                        //  音频文件图标上传
                        GlideUtils.loadResourceImageForCrop(
                            mContext, R.drawable.xinjiananjian_pic_amr, holder.itemView.mCaseImageIv
                        )
                        // 删除按钮配置
                        if (isDelete) {
                            holder.itemView.mDelCaseImageBtn.visibility = View.VISIBLE
                            holder.itemView.mDelCaseImageBtn.setOnClickListener {
                                // 从本地文件中删除，是否要删除远程文件待定
                                // 从列表中删除
                                dataList.removeAt(position)
                                notifyDataSetChanged()
                            }
                        } else {
                            // 隐藏删除标签
                            holder.itemView.mDelCaseImageBtn.visibility = View.GONE
                        }
                        // 音频文件上传时间
                        holder.itemView.mCaseImageAddTimeTv.visibility = View.VISIBLE
                        holder.itemView.mCaseImageAddTimeTv.text = imageAddTimeText
                    }
                }
            }
            else -> {
                // 图片
                // 判断 UploadInfo 中 getPath 和 originUrl 同时为null
                when (data.getPath.isNullOrBlank().and(data.originUrl.isNullOrBlank())) {
                    true -> {
                        // 是上传按钮
                        // 显示上传图片按钮
                        GlideUtils.loadResourceImageForFit(
                            mContext,
                            R.drawable.xinjiananjian_icon_add,
                            holder.itemView.mCaseImageIv
                        )

                        holder.itemView.mCaseImageIv.scaleType = ImageView.ScaleType.FIT_XY
                        holder.itemView.mDelCaseImageBtn.visibility = View.GONE
                        holder.itemView.mCaseImageAddTimeTv.text =
                            holder.itemView.resources.getText(R.string.DEFAULT_DATETIME)
                        holder.itemView.mCaseImageAddTimeTv.visibility = View.INVISIBLE
                    }
                    false -> {
                        // 默认加载缩略图 thumbUrl
                        var imageThumbUrl: String = if (
                            data.imageThumbUrl.startsWith(BaseConstant.DEFAULT_UPLOAD_SERVER)
                        ) {
                            data.imageThumbUrl
                        } else {
                            BaseConstant.DEFAULT_UPLOAD_SERVER + data.thumbUrl
                        }

                        // 显示时间：时间戳
                        val imageAddTimeText: String = DateUtils.convertTimeToString(
                            data.addTime!!.toLong(), "yyyy-MM-dd HH:mm:ss"
                        )
                        //  回显示上传图片
                        GlideUtils.loadUrlImage(
                            mContext, imageThumbUrl,
                            holder.itemView.mCaseImageIv
                        )

                        // 图片删除按钮配置
                        if (isDelete) {
                            holder.itemView.mDelCaseImageBtn.visibility = View.VISIBLE
                            holder.itemView.mDelCaseImageBtn.setOnClickListener {
                                // 从本地文件中删除，是否要删除远程文件待定
                                // 从列表中删除
                                dataList.removeAt(position)
                                notifyDataSetChanged()
                            }
                        } else {
                            // 隐藏删除标签
                            holder.itemView.mDelCaseImageBtn.visibility = View.GONE
                        }
                        // 图片上传时间
                        holder.itemView.mCaseImageAddTimeTv.visibility = View.VISIBLE
                        holder.itemView.mCaseImageAddTimeTv.text = imageAddTimeText
                    }
                }
            }
        }


    }

    /**
     * 返回数据记录数
     */
    override fun getItemCount(): Int {
        // 多设置一条记录（上传图片按钮）
        val count = dataList.size
        return when (count > this.maxImages) {
            true -> {
                maxImages
            }
            false -> {
                count
            }
        }
    }

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
}